import java.util.Scanner;

public class Test {

    //1004.最大连续1的个数
    public int longestOnes(int[] nums, int k) {
        int count=0;//记录0的个数
        int len = 0;
        for(int left=0,right=0;right<nums.length;right++) {
            //1.入窗口
            if(nums[right]==0) count++;
            //2，判断
            while(count>k) {
                if(nums[left]==0) count--;
                //4.出窗口
                left++;
            }
            //3.更新结果
            if(count==k || right==nums.length-1) {
                len = Math.max(len,right-left+1);
            }
        }
        return len;
    }
    //二维前缀和
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            //1.输入操作
            int n = in.nextInt();
            int m = in.nextInt();
            int q = in.nextInt();
            int[][] arr = new int[n+1][m+1];
            for(int i =1;i<n+1;i++) {
                for(int j=1;j<m+1;j++) {
                    arr[i][j] = in.nextInt();
                }
            }
            //2.dp数组
            long[][] dp = new long[n+1][m+1];
            for(int i=0;i<m+1;i++) dp[0][i]=0;
            for(int i=0;i<n+1;i++) dp[i][0]=0;
            for(int i=1;i<n+1;i++) {
                for(int j=1;j<m+1;j++) {
                    dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+arr[i][j];
                }
            }
            //3.输出
            for(int i=0;i<q;i++) {
                int x1=in.nextInt();
                int y1=in.nextInt();
                int x2=in.nextInt();
                int y2=in.nextInt();
                System.out.println(dp[x2][y2]-dp[x1-1][y2]+dp[x1-1][y1-1]-dp[x2][y1-1]);
            }

        }
    }


}
